/**
 * @file rawDataManage.js
 * @Date 2023-10-20, 周五, 10:55
 * @description 文件说明
 * 我的空间原始数据资源模块js文件
 */
$(function () {
    /******************************************初始化******************************************/
    const table=layui.table;
    const form=layui.form;
    // 资源查询参数
    let rawDatParams={
         currPage:0,
        pageSize:10,
        relatedUserId:sessionStorage.getItem('UserId'),
        keyword:null
    }
    // 子资源查询参数
    let rawSonDataParams ={
        currPage:0,
        pageSize:10,
        relatedUserId:sessionStorage.getItem('UserId'),
        keyword:null,
        datasourceDbId:null//所属数据库id
    }
    // 资源管理表格
    const rawTable=table.render({
        elem: '#rawTable'
        ,height: '.layui-tab-item'
        ,data:[]
        // ,page: true //开启分页
        ,cols: [[ //表头
            {type:'numbers', title: '序号', width:60}
            ,{field: 'dbName', title: '名称', width:150}
            ,{field: 'dbNickName', title: '别名'}
            ,{field: 'dbType', title: '类型'}
            ,{field: 'datasourceSystemName', title: '所在平台', width:90}
            ,{field: 'tableNumber', title: '资源数量', width:90}
            ,{field: 'totalRows', title: '记录数量', width:90}
            ,{  title: '操作', width: 180, templet:function (d){
                   return ` <a class="layui-btn layui-btn-danger layui-btn-xs text-white" lay-event="detail">详情</a>`
                }
            },
        ]]
    })
    // 子资源管理表格
    const rawSonTable=table.render({
        elem: '#rawSonTable'
        ,height: '.layui-tab-item'
        ,data:[]
        // ,page: true //开启分页
        ,cols: [[ //表头
            // {type:'checkbox', width:60},
            {type:'numbers', title: '序号', width:60}
            ,{field: 'tableName', title: '名称', width:150}
            ,{field: 'tableNickName', title: '别名'}
            ,{field: 'datasourceDbName', title: '所在资源', width:90}
            ,{field: 'quantity', title: '记录数量', width:90}
            ,{field: 'isUsing', title: '是否启用', width:90,
                templet:function (d) {
                    return `<span>${d.isUsing===1?'是':'否'}</span>`
                }}
            ,{field: 'isShare', title: '是否共享', width:90,
                templet:function (d) {
                    return `<span>${d.isShare===1?'是':'否'}</span>`
                }}
            ,{field: 'isFree', title: '是否免费', width:90,
                templet:function (d) {
                    return `<span>${d.isFree===1?'是':'否'}</span>`
                }}
            ,{  title: '操作', width: 180, templet:function (d){
                    return ` <a class="layui-btn layui-btn-danger layui-btn-xs text-white" lay-event="detail">治理</a>`
                }
            },

        ]]
    })
    // 资源选择下拉框cas单选配置
    const rawCasParams={
        elem: '#rawCas',
        clearable: true,
        filterable: true,
        // options: data,
        placeholder:'请选择原始数据资源',
        props: {
            checkStrictly: true
        },
    }
    // 资源选择下拉框cas
    const rawCas=layui.layCascader(rawCasParams)
    $('#rawDataText').css('display','none')
    /******************************************事件处理部分******************************************/
    // 监听tab切换 隐藏选择数据表资源下拉框
    layui.element.on('tab(rawDataManage)', function(data){
        let index = data.index;
        if (index===1){
            $('.rawSearch').css('display','flex')
            $('#rawDataText').css('display','flex')
            rawAllListReq().then(res=>{
                rawCas.setOptions(dataFormat(res.data,'id','dbName','dbNickName'))
                rawCas.setValue(res.data[0].id)
                rawSonDataParams.datasourceDbId=res.data[0].id;
                rawSonTableRender(rawSonDataParams)
            })
            // 选中数据库之后渲染对应的子资源（数据表）
            rawCas.changeEvent(function (value){
                rawSonDataParams.datasourceDbId=value;
                rawSonTableRender(rawSonDataParams)
            })
        }else {
            $('.rawSearch').css('display','none')
            $('#rawDataText').css('display','none')
        }
    });
    // 原始数据资源表格详情操作
    table.on('tool(rawTableFilter)',function (obj){
        const data=obj.data;
        if (obj.event==='detail'){
            layer.open({
            	type: 2,
            	title: "原始数据资源详情",
            	area: ['800px', '600px'],
            	content: ['./popupPage/rawDataDetail.html', 'no'],
                success:function (layero,index){
                    let body = layer.getChildFrame('body', index);
                    // form.val('rawForm',data)
                    const categoryList=data.categoryList?.map(item=>{
                        return item.typeName
                    })
                    const originDbList=data.originDbList?.map(item=>{
                        return item.dbName
                    })
                    body.find('input[name=dbName]').val(data.dbName)
                    body.find('input[name=dbNickName]').val(data.dbNickName)
                    body.find('input[name=dbType]').val(data.dbType)
                    body.find('input[name=datasourceSystemName]').val(data.datasourceSystemName)
                    body.find('input[name=tableNumber]').val(data.tableNumber)
                    body.find('input[name=totalRows]').val(data.totalRows)
                    body.find('input[name=originDatasourceDbIdList]').val(originDbList?.join(','))
                    body.find('input[name=typeIdList]').val(categoryList?.join('/'))
                    body.find('textarea[name=remark]').val(data.remark||'暂无')
                    body.find('textarea[name=originUrl]').val(data.originUrl||暂无)
                }
            });
        }else {
            layer.msg('错误的表格操作')
        }
    })
    // 原始数据子资源表格详情操作
    table.on('tool(rawSonTableFilter)',function (obj){
        const data=obj.data;
        if (obj.event==='detail'){
            layer.open({
                type: 2,
                title: "治理原始数据资源",
                area: ['800px', '600px'],
                content: `./popupPage/rawSonDataDetail.html?id=${data.id}`
            });
        }else {
            layer.msg('错误的表格操作')
        }
    })
    /******************************************功能函数说明******************************************/
   /**
    * @description:请求原始数据资源分页
    * @return {Promise} 请求的结果
    * @param params {Object}请求参数
    */
    function rawListReq(params){
        return new Promise((function (resolve, reject) {
            $.ajax({
       timeout:30000,
                url: window.Http + "/datasourceDb/list",
                type: 'GET',
                headers: {
                    'Authorization': "Bearer " + sessionStorage.getItem('Token')
                },
                data:params,
                success: function (res) {
                    if (res.code===200){
                        resolve(res)
                    }else {
                        layer.msg(res.msg)
                        reject(new Error("请求失败")); // 失败时将错误传递给调用者
                    }
                }
            })
        }))
    }

    /**
     * @description:原始数据资源表格和分页渲染
     * @return 返回值
     * @param params {Object} 请求原始数据资源参数
     */
    function rawTableRender(params){
        rawListReq(params).then(res=>{
            rawTable.reload({data:res.rows})
            layui.laypage.render({
                elem: 'rawTablePage', //注意，这里的 test1 是 ID，不用加 # 号
                count: res.total, //数据总数，从服务端得到
                limit: 10,
                groups: 5,
                jump: function (obj, first) {
                    if(!first){
                        console.log('obj.curr', obj.curr)
                        params.currPage=obj.curr
                        rawListReq(params).then(res=>{
                            rawTable.reload({data:res.rows})
                        });
                    }
                }
            });
        })
    }

    /**
     * @description:请求原始数据子资源分页
     * @return {Promise} 请求的结果
     * @param params {Object} 请求原始数据子资源参数
     */
    function rawSonListReq(params){
        return new Promise((function (resolve, reject) {
            $.ajax({
       timeout:30000,
                url: window.Http + "/datasourceTable/list",
                type: 'GET',
                headers: {
                    'Authorization': "Bearer " + sessionStorage.getItem('Token')
                },
                data:params,
                success: function (res) {
                    if (res.code===200){
                        resolve(res)
                    }else {
                        layer.msg(res.msg)
                        reject(new Error("请求失败")); // 失败时将错误传递给调用者
                    }
                }
            })
        }))
    }
    /**
     * @description:渲染子资源表格和分页
     * @return 无
     * @param params {Object}请求参数
     */
    function rawSonTableRender(params){
        rawSonListReq(params).then(res=>{
            rawSonTable.reload({data:res.rows})
            layui.laypage.render({
                elem: 'rawSonTablePage', //注意，这里的 test1 是 ID，不用加 # 号
                count: res.total, //数据总数，从服务端得到
                limit: 10,
                groups: 5,
                jump: function (obj, first) {
                    if(!first){
                        console.log('obj.curr', obj.curr)
                        params.currPage=obj.curr
                        rawSonListReq(params).then(res=>{
                            rawSonTable.reload({data:res.rows})
                        });
                    }
                }
            });
        })
    }

    /**
     * @description:函数描述 请求原始资源下拉列表
     * @return {Promise}请求的结果
     */
    function rawAllListReq(){
        return new Promise((function (resolve, reject) {
            $.ajax({
       timeout:30000,
                url: window.Http + "/datasourceDb/list/all",
                type: 'GET',
                headers: {
                    'Authorization': "Bearer " + sessionStorage.getItem('Token')
                },
                data:{
                    relatedUserId:sessionStorage.getItem('UserId')
                },
                success: function (res) {
                    if (res.code===200){
                        resolve(res)
                    }else {
                        layer.msg(res.msg)
                        reject(new Error("请求失败")); // 失败时将错误传递给调用者
                    }
                }
            })
        }))
    }

    /**
     * @description:函数描述 数据转换成级联列表需要的样式
     * @return  {Array} arr 正确的数据
     * @param data {Array} 原始数组
     * @param value {String} 绑定的值（id）
     * @param label {String} 标签显示值
     * @param secondLabel
     */
    function dataFormat(data,value,label,secondLabel){
        let arr=[]
        data.forEach(function (item,index){
            arr[index]={value:'',label:''}
            arr[index].value=data[index][value];
            arr[index].label=`${data[index][label]}-${data[index][secondLabel]}`
        })
        return arr;
    }
    // 初始化渲染表格和分页
    rawTableRender(rawDatParams)
    // rawSonTableRender(rawSonDataParams)
})